/*
 * SisAP - Sistema de Alocacao de Professores
 *
 * Copyright (C) 2011  Macambira Team.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */
package com.googlecode.persistence;

import com.googlecode.conection.ConectaDB;
import com.googlecode.entity.Departamento;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 * Classe responsavel por fazer a persistencia com o banco de dados do departamento
 *
 * @version 0.1 03 dec 2011
 * @author Jafet
 */
public class DepartamentoDAO {
    private static DepartamentoDAO departamentoDAO;
    
    public static DepartamentoDAO getInstance() {
            synchronized (DepartamentoDAO.class) {
                if (departamentoDAO == null) {
                    departamentoDAO = new DepartamentoDAO();
                }
            }
            return departamentoDAO;
        }
    
    public void CadastrarDepartamento (Departamento departamento) throws ClassNotFoundException, SQLException {
        PreparedStatement ps;
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = (PreparedStatement) con.prepareStatement("INSERT INTO departamentos"
                    + "(idDepart, nome)"
                    + "VALUES (?,?)");
            ps.setString(1, departamento.getId());
            ps.setString(2, departamento.getNome());
            ps.execute();
            con.close();
            JOptionPane.showMessageDialog(null, "Cadastro realizado com Sucesso");
        }catch (SQLException e) {
            JOptionPane.showMessageDialog(null, "Departamento não pode ser cadastrado");
            throw new RuntimeException(e);
        }
    }
    
    public void RemoverDepartamentoID (String idDepart) throws ClassNotFoundException, SQLException {
        PreparedStatement ps;
        try {
        Connection con = (Connection) ConectaDB.getInstance().getCon();
        ps = (PreparedStatement) con.prepareStatement("DELETE FROM departamentos WHERE ='" + idDepart + "'");
        ps.execute();
        con.close();
        JOptionPane.showMessageDialog(null, "Removido com sucesso");
      } catch(SQLException e) {
          JOptionPane.showMessageDialog(null, "Departamento não pode ser removido");
          throw new RuntimeException(e);
      }
    }
    
     public void RemoverDepartamentoNome (String nomeDepart) throws ClassNotFoundException, SQLException {
        PreparedStatement ps;
        try {
        Connection con = (Connection) ConectaDB.getInstance().getCon();
        ps = (PreparedStatement) con.prepareStatement("DELETE FROM departamentos WHERE ='" + nomeDepart + "'");
        ps.execute();
        con.close();
        JOptionPane.showMessageDialog(null, "Removido com sucesso");
      } catch(SQLException e) {
          JOptionPane.showMessageDialog(null, "Departamento não pode ser removido");
          throw new RuntimeException(e);
      }
    }
    
    public void EditarDepartamento (Departamento departamento) throws ClassNotFoundException, SQLException {
        PreparedStatement ps;
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = (PreparedStatement) con.prepareStatement("UPDATE departamentos nome = ? WHERE idDepart = ?");
            ps.setString(1, departamento.getNome());
            ps.setString(2, departamento.getId());
            ps.execute();
            con.close();
            JOptionPane.showMessageDialog(null, "Alteração Realizada");
        } catch(SQLException e) {
            JOptionPane.showMessageDialog(null, "Alteração não foi realizada");
            throw new RuntimeException(e);
        }
    }
    
    public Departamento ConsultaDepartamentoID (String idDepart) throws ClassNotFoundException, SQLException {
        ResultSet rs;
        PreparedStatement ps;
        Departamento d = new Departamento();
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = con.prepareStatement("SELECT * FROM departamentos WHERE idDepart = ?");
            ps.setString(1, idDepart);
            rs = ps.executeQuery();
            while(rs.next()){
                d.setId(rs.getString("idDepart"));
                d.setNome(rs.getString("nome"));
            }
            con.close();
        } catch(SQLException e) {
            JOptionPane.showMessageDialog(null, "Não pode ser encontrado");
            throw new RuntimeException(e);
        }
        return d;
    }
    
    public Departamento ConsultaDepartamentoNome (String nomeDepart) throws ClassNotFoundException, SQLException {
        ResultSet rs;
        PreparedStatement ps;
        Departamento d = new Departamento();
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = (PreparedStatement) con.prepareStatement("SELECT * FROM departamentos WHERE nome = ?");
            ps.setString(1, nomeDepart);
            rs = ps.executeQuery();
            while(rs.next()){
                d.setId(rs.getString("idDepart"));
                d.setNome(rs.getString("nome"));
            }
            con.close();
        } catch(SQLException e) {
            JOptionPane.showMessageDialog(null, "Não pode ser encontrado");
            throw new RuntimeException(e);
        }
        return d;
    }
    
    public List<Departamento> ConsultaTodosDepartamentos () {
        List<Departamento> departamentos = new LinkedList<Departamento>();
        ResultSet rs;
        PreparedStatement ps;
        Departamento d = new Departamento();
        try {
            Connection con = (Connection) ConectaDB.getInstance().getCon();
            ps = (PreparedStatement) con.prepareStatement("SELECT * FROM departamentos WHERE nome = ?");
            //ps.setString(1, nomeDepart);
            rs = ps.executeQuery();
            while(rs.next()){
                d.setId(rs.getString("idDepart"));
                d.setNome(rs.getString("nome"));
                departamentos.add(d);
            }
            con.close();
            return departamentos;
        } catch(Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Não pode ser encontrado");
        }
        return departamentos;
    }
    
}
